var expenseAdd = {
    addInputs: function()
    {
        var $collectionHolder;
        var $addExpenseLink = $('<a href="#" class="add_tag_link">Add new expense</a>');
        //var $newLinkLi      = $('<p></p>').append($addExpenseLink);
        var $newLinkLi      = $('#add-expense-btn').append($addExpenseLink);

        $collectionHolder = $('ul.expenses');
        $collectionHolder.append($newLinkLi);
        $collectionHolder.data('index', $collectionHolder.find(':input').length);

        $collectionHolder.find('li').each(function() {
            addExpensFormDeleteLink($(this));
        });

        $addExpenseLink.on('click', function(e) {
            e.preventDefault();
            addExpenseForm($collectionHolder, $newLinkLi);
        });

        function addExpenseForm($collectionHolder, $newLinkLi)
        {
            var prototype = $collectionHolder.data('prototype');
            var index     = $collectionHolder.data('index');
            var newForm   = prototype.replace(/__name__/g, index);
            $collectionHolder.data('index', index + 1);
            var $newFormLi = $('<li class="form-inline form-inline-tmp"></li>').append(newForm);
            $newLinkLi.before($newFormLi);
            var today = moment().format('DD.MM.YYYY');
           
            $('#expenses_expenses_' + index + '_date').val(today);
            $('body').on('focus', '#expenses_expenses_' + index + '_date', function() {
                $(this).datetimepicker({"format": "dd.mm.yyyy", "pickerPosition": "bottom-left", "minView": "month"});
            });
            addExpensFormDeleteLink($newFormLi);
            $('#expenses_expenses_' + index + '_category').combobox();
        }

        function addExpensFormDeleteLink($expensFormLi)
        {
            var $removeFormA = $('<button class="btn btn-danger" type="button">Del</button>');
            $expensFormLi.append($removeFormA);

            $removeFormA.on('click', function(e) {
                e.preventDefault();
                $expensFormLi.remove();
            });
        }
    },
    sendData: function()
    {
        $("#expensesForm").submit(function() {
            var url = $("#expensesForm").attr("action");
            $('.small-ajax-loader').show();
            
            $.post(url,
                $("#expensesForm").serialize(),
                function(data) {
                    if (data.isSuccess) {
                        $('#flash-alert').append("<div class='alert alert-success' role='alert'>Expense added!</div>");
                        $('#list').trigger("reloadGrid");
                        $('#flash-alert div').fadeOut(4000, function() {
                        });
                        $('.form-inline-tmp').remove();
                        $('#expenses_expenses_0_price').val('');
                        $(".custom-combobox-input").val($("#expenses_expenses_0_category option:first").text());
                        $('#expenses_expenses_0_comment').val('');
                        $('#expenses_expenses_0_date').val(moment().format('DD.MM.YYYY'));
                    } else {
                        $('#flash-alert').append("<div class='alert alert-danger' role='alert'>Expense not added!</div>");
                        $('#flash-alert div').fadeOut(4000, function() {
                        });
                    }
                    $('.small-ajax-loader').hide();
                }
            );

            return false;
        });
    },
    addPlannedExpense: function()
    {
        $("#plannedExpenseForm").submit(function() {
            var url = $("#plannedExpenseForm").attr("action");
      
            $.post(url,
                $("#plannedExpenseForm").serialize(),
                function(data) {
                    if (data.status) {
                        $('#flash-alert').append("<div class='alert alert-success' role='alert'>Planned expense added!</div>");
                        $('#list_planned_expenses').trigger("reloadGrid");
                        $('#flash-alert div').fadeOut(4000, function() {
                        });
                        $('#boxAddPlannedExpense').modal('hide');
                    } else {
                        $('#flash-alert').append("<div class='alert alert-danger' role='alert'>Planned expense not added!</div>");
                        $('#flash-alert div').fadeOut(4000, function() {
                        });
                    }
                }
            );

            return false;
        });
    },
    autoCompleteCategory: function()
    {
         (function($) {
            $.widget("custom.combobox", {
                // create autoxomplete box
                _create: function() {
                    this.wrapper = $("<span>")
                            .addClass("custom-combobox")
                            .insertAfter(this.element);
                    this.element.hide();
                    this._createAutocomplete();
                    this._createShowAllButton();
                },
                // create input autocomplete
                _createAutocomplete: function() {
                    var selected = this.element.children(":selected"),
                            value = selected.val() ? selected.text() : "";
                    this.input = $("<input>")
                            .appendTo(this.wrapper)
                            .val(value)
                            .attr("title", "")
                            .addClass("custom-combobox-input ui-widget ui-widget-content ui-state-default ui-corner-left")
                            .autocomplete({
                                delay: 0,
                                minLength: 0,
                                source: $.proxy(this, "_source")
                            })
                            .tooltip({
                                tooltipClass: "ui-state-highlight"
                            });
                    this._on(this.input, {
                        autocompleteselect: function(event, ui) {
                            ui.item.option.selected = true;
                            this._trigger("select", event, {
                                item: ui.item.option
                            });
                        },
                        autocompletechange: "_removeIfInvalid"
                    });
                },
                // create button show all
                _createShowAllButton: function() {
                    var input = this.input,
                            wasOpen = false;
                    $("<a>")
                            .attr("tabIndex", -1)
                            .attr("title", "Show All Items")
                            .tooltip()
                            .appendTo(this.wrapper)
                            .button({
                                icons: {
                                    primary: "ui-icon-triangle-1-s"
                                },
                                text: false
                            })
                            .removeClass("ui-corner-all")
                            .addClass("custom-combobox-toggle ui-corner-right")
                            .mousedown(function() {
                                wasOpen = input.autocomplete("widget").is(":visible");
                            })
                            .click(function() {
                                input.focus();
                                // Close if already visible
                                if (wasOpen) {
                                    return;
                                }
                                // Pass empty string as value to search for, displaying all results
                                input.autocomplete("search", "");
                            });
                },
                // check selected text
                _source: function(request, response) {
                    var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
                    response(this.element.children("option").map(function() {
                        var text = $(this).text();
                        if (this.value && (!request.term || matcher.test(text)))
                            return {
                                label: text,
                                value: text,
                                option: this
                            };
                    }));
                },
                _removeIfInvalid: function(event, ui) {
                    // Selected an item, nothing to do
                    if (ui.item) {
                        return;
                    }
                    // Search for a match (case-insensitive)
                    var value = this.input.val(),
                            valueLowerCase = value.toLowerCase(),
                            valid = false;
                    this.element.children("option").each(function() {
                        if ($(this).text().toLowerCase() === valueLowerCase) {
                            this.selected = valid = true;
                            return false;
                        }
                    });
                    // Found a match, nothing to do
                    if (valid) {
                        return;
                    }
                    // Remove invalid value
                    this.input
                            .val("")
                            .attr("title", value + " didn't match any item")
                            .tooltip("open");
                    this.element.val("");
                    this._delay(function() {
                        this.input.tooltip("close").attr("title", "");
                    }, 2500);
                    this.input.autocomplete("instance").term = "";
                },
                _destroy: function() {
                    this.wrapper.remove();
                    this.element.show();
                }
            });
        })(jQuery);
        
        $(function() {
            $("#expenses_expenses_0_category").combobox();
        });
    }
}
